package cn.kgc.service.impl;

import cn.hutool.core.util.StrUtil;
import cn.kgc.entity.SmbmsRole;
import cn.kgc.util.Pager;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import cn.kgc.mapper.SmbmsUserMapper;
import cn.kgc.entity.SmbmsUser;
import cn.kgc.service.SmbmsUserService;
import com.github.yulichang.toolkit.JoinWrappers;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import org.springframework.stereotype.Service;
import lombok.extern.slf4j.Slf4j;

/**
 * @author example
 * @version 1.0
 */
@Slf4j
@Service("smbmsUserService")
@SuppressWarnings("all")
public class SmbmsUserServiceImpl extends ServiceImpl<SmbmsUserMapper, SmbmsUser> implements SmbmsUserService {

    @Override
    public Pager<SmbmsUser> pageList(int pageIndex, int pageSize, String userName) {
        //wrapper: 表链接的条件与查询的条件
        //查询用户表中的数据
        MPJLambdaWrapper<SmbmsUser> wrapper = JoinWrappers.lambda(SmbmsUser.class)
                //查询角色表中的数据
                .selectAssociation(SmbmsRole.class, SmbmsUser::getSmbmsRole)
                //查询用户表中的所有数据
                .selectAll(SmbmsUser.class)
                //查询角色表中的所有数据
                .selectAll(SmbmsRole.class)
                //左外链接查询  用户左外链接角色  链接条件是用户表的角色编号等于角色表中的角色编号
                .leftJoin(SmbmsRole.class, SmbmsRole::getId, SmbmsUser::getUserrole)
                //按照用户名模糊查询
                .like(StrUtil.isNotBlank(userName),SmbmsUser::getUsername, userName);

        //page:分页查询的条件
        Page<SmbmsUser> page=new Page<>(pageIndex,pageSize);
        //按照条件分页查询数据  page里面包含了分页查询的结果
        getBaseMapper().selectJoinPage(page,wrapper);
        //将MyBatisPlus分页的结果封装成Pager对象返回
        return Pager.build(page);
    }

    public SmbmsUser getUserById(String userId) {
        //查询用户表中的数据
        MPJLambdaWrapper<SmbmsUser> wrapper = JoinWrappers.lambda(SmbmsUser.class)
                //查询用户关联的角色表的数据(一个用户对应一个角色)
                .selectAssociation(SmbmsRole.class, SmbmsUser::getSmbmsRole)
                //查询用户表中的所有数据
                .selectAll(SmbmsUser.class)
                //查询角色表中的所有数据
                .selectAll(SmbmsRole.class)
                //做外链接查询 用户表中的角色编号等于角色表中的角色编号
                .leftJoin(SmbmsRole.class, SmbmsRole::getId, SmbmsUser::getUserrole)
                //根据用户的id查询单个用户
                .eq(SmbmsUser::getId, userId);

        //  select user.* ,role.*  from smbms_user user  left join  smbms_role role
        // on user.userrole = role.id
        // where user.id = 1
        return getBaseMapper().selectJoinOne(wrapper);
    }
}
